{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Taxi fare Keras Feature Columns (solution).ipynb",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/GoogleCloudPlatform/training-data-analyst/blob/master/courses/fast-and-lean-data-science/08_Taxifare_Keras_FeatureColumns_solution.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "metadata": {
        "id": "fIvCMy8TH170",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Keras Feature Columns are not an officially released feature yet. Some caveats apply: please run this notebook on a GPU Backend. Keras Feature Columns are not comaptible with TPUs yet. Also, you will not be able to export this model to Tensorflow's \"saved model\" format for serving. The serving layer for feature columns will be added soon.\n"
      ]
    },
    {
      "metadata": {
        "id": "8g9DaHx7HFtl",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Imports"
      ]
    },
    {
      "metadata": {
        "id": "4RmX7O1HBoFE",
        "colab_type": "code",
        "outputId": "060c0c74-7007-4734-9c5b-54e8b6f8b0de",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "cell_type": "code",
      "source": [
        "import os, json, math\n",
        "import numpy as np\n",
        "import tensorflow as tf\n",
        "from tensorflow.python.feature_column import feature_column_v2 as fc  # This will change when Keras FeatureColumn is final.\n",
        "from matplotlib import pyplot as plt\n",
        "print(\"Tensorflow version \" + tf.__version__)\n",
        "tf.enable_eager_execution()"
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Tensorflow version 1.12.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "k4565fhT0hRn",
        "colab_type": "code",
        "cellView": "form",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "#@title display utilities [RUN ME]\n",
        "# utility to display training and validation curves\n",
        "def display_training_curves(training, validation, title, subplot):\n",
        "  if subplot%10==1: # set up the subplots on the first call\n",
        "    plt.subplots(figsize=(10,10), facecolor='#F0F0F0')\n",
        "    plt.tight_layout()\n",
        "  ax = plt.subplot(subplot)\n",
        "  ax.set_facecolor('#F8F8F8')\n",
        "  ax.plot(training)\n",
        "  ax.plot(validation)\n",
        "  ax.set_title('model '+ title)\n",
        "  ax.set_ylabel(title)\n",
        "  ax.set_xlabel('epoch')\n",
        "  ax.legend(['train', 'valid.'])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "iBn9AycUKk2U",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Colab-only auth"
      ]
    },
    {
      "metadata": {
        "id": "RTVUYJiZKoRc",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# backend identification\n",
        "IS_COLAB = 'COLAB_GPU' in os.environ  # this is always set on Colab, the value is 0 or 1 depending on GPU presence\n",
        "HAS_COLAB_TPU = 'COLAB_TPU_ADDR' in os.environ\n",
        "\n",
        "# Auth on Colab\n",
        "if IS_COLAB:\n",
        "  from google.colab import auth\n",
        "  auth.authenticate_user()\n",
        "  \n",
        "# Also propagate the Auth to TPU if available so that it can access your GCS buckets\n",
        "if IS_COLAB and HAS_COLAB_TPU:\n",
        "  TF_MASTER = 'grpc://{}'.format(os.environ['COLAB_TPU_ADDR'])\n",
        "  with tf.Session(TF_MASTER) as sess:    \n",
        "    with open('/content/adc.json', 'r') as f:\n",
        "      auth_info = json.load(f) # Upload the credentials to TPU.\n",
        "    tf.contrib.cloud.configure_gcs(sess, credentials=auth_info)\n",
        "  print('Using TPU')\n",
        "\n",
        "# TPU usage flag\n",
        "USE_TPU = HAS_COLAB_TPU"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "4OXx6ozUHzPd",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Config"
      ]
    },
    {
      "metadata": {
        "id": "asbCdV0iH1z8",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "DATA_BUCKET = \"gs://cloud-training-demos/taxifare/ch4/taxi_preproc/\"\n",
        "TRAIN_DATA_PATTERN = DATA_BUCKET + \"train*\"\n",
        "VALID_DATA_PATTERN = DATA_BUCKET + \"valid*\""
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "EuDURqOPJiQ2",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "CSV_COLUMNS = ['fare_amount', 'dayofweek', 'hourofday', 'pickuplon','pickuplat','dropofflon','dropofflat','passengers', 'key']\n",
        "DEFAULTS = [[0.0], ['null'], [12], [-74.0], [40.0], [-74.0], [40.7], [1.0], ['nokey']]\n",
        "\n",
        "def decode_csv(line):\n",
        "  column_values = tf.decode_csv(line, DEFAULTS)\n",
        "  column_names = CSV_COLUMNS\n",
        "  decoded_line = dict(zip(column_names, column_values)) # create a dictionary {'column_name': value, ...} for each line  \n",
        "  return decoded_line\n",
        "\n",
        "def load_dataset(pattern):\n",
        "  #filenames = tf.gfile.Glob(pattern)\n",
        "  filenames = tf.data.Dataset.list_files(pattern)\n",
        "  #dataset = tf.data.TextLineDataset(filenames)\n",
        "  dataset = filenames.interleave(tf.data.TextLineDataset, cycle_length=16)  # interleave so that reading happens from multiple files in parallel\n",
        "  dataset = dataset.map(decode_csv)\n",
        "  return dataset"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "bSleDYsrNXzs",
        "colab_type": "code",
        "outputId": "75dc8050-6889-422d-8ceb-24332325c365",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 241
        }
      },
      "cell_type": "code",
      "source": [
        "dataset = load_dataset(TRAIN_DATA_PATTERN)\n",
        "for n, data in enumerate(dataset):\n",
        "  numpy_data = {k: v.numpy() for k, v in data.items()} # .numpy() works in eager mode\n",
        "  print(numpy_data)\n",
        "  if n>10: break"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "{'fare_amount': 19.0, 'dayofweek': b'Sat', 'hourofday': 8, 'pickuplon': -74.006165, 'pickuplat': 40.7051, 'dropofflon': -73.980095, 'dropofflat': 40.75247, 'passengers': 2.0, 'key': b'2013-03-09 08:30:00.000000-74.006240.705140.7525-73.9801'}\n",
            "{'fare_amount': 5.3, 'dayofweek': b'Wed', 'hourofday': 22, 'pickuplon': -74.00663, 'pickuplat': 40.71627, 'dropofflon': -73.99982, 'dropofflat': 40.731148, 'passengers': 1.0, 'key': b'2010-12-22 22:44:00.000000-74.006640.716340.7311-73.9998'}\n",
            "{'fare_amount': 2.5, 'dayofweek': b'Wed', 'hourofday': 0, 'pickuplon': -74.00178, 'pickuplat': 40.735416, 'dropofflon': -74.00195, 'dropofflat': 40.734978, 'passengers': 1.0, 'key': b'2014-03-05 00:07:00.000000-74.001840.735440.735-74.002'}\n",
            "{'fare_amount': 6.5, 'dayofweek': b'Wed', 'hourofday': 6, 'pickuplon': -74.010414, 'pickuplat': 40.72008, 'dropofflon': -74.008514, 'dropofflat': 40.707844, 'passengers': 1.0, 'key': b'2013-09-04 06:34:00.000000-74.010440.720140.7078-74.0085'}\n",
            "{'fare_amount': 16.1, 'dayofweek': b'Sun', 'hourofday': 15, 'pickuplon': -74.0107, 'pickuplat': 40.710037, 'dropofflon': -73.96543, 'dropofflat': 40.75697, 'passengers': 2.0, 'key': b'2009-05-03 15:51:13.000000-74.010740.7140.757-73.9654'}\n",
            "{'fare_amount': 10.9, 'dayofweek': b'Tue', 'hourofday': 16, 'pickuplon': -73.9871, 'pickuplat': 40.72528, 'dropofflon': -73.99647, 'dropofflat': 40.75305, 'passengers': 1.0, 'key': b'2012-05-29 16:16:03.000000-73.987140.725340.7531-73.9965'}\n",
            "{'fare_amount': 7.3, 'dayofweek': b'Thu', 'hourofday': 14, 'pickuplon': -73.825165, 'pickuplat': 40.745167, 'dropofflon': -73.82816, 'dropofflat': 40.75099, 'passengers': 5.0, 'key': b'2010-05-13 14:53:00.000000-73.825240.745240.751-73.8282'}\n",
            "{'fare_amount': 2.5, 'dayofweek': b'Fri', 'hourofday': 0, 'pickuplon': -73.99397, 'pickuplat': 40.75142, 'dropofflon': -73.99095, 'dropofflat': 40.755474, 'passengers': 1.0, 'key': b'2014-08-29 00:29:00.000000-73.99440.751440.7555-73.991'}\n",
            "{'fare_amount': 2.5, 'dayofweek': b'Thu', 'hourofday': 0, 'pickuplon': -73.97609, 'pickuplat': 40.764126, 'dropofflon': -73.97421, 'dropofflat': 40.763348, 'passengers': 1.0, 'key': b'2010-03-18 00:02:09.000000-73.976140.764140.7633-73.9742'}\n",
            "{'fare_amount': 15.5, 'dayofweek': b'Fri', 'hourofday': 19, 'pickuplon': -73.971924, 'pickuplat': 40.745842, 'dropofflon': -74.00344, 'dropofflat': 40.732437, 'passengers': 1.0, 'key': b'2015-02-06 19:48:43.000000-73.971940.745840.7324-74.0034'}\n",
            "{'fare_amount': 4.1, 'dayofweek': b'Sun', 'hourofday': 11, 'pickuplon': -73.98547, 'pickuplat': 40.759377, 'dropofflon': -73.99159, 'dropofflat': 40.75146, 'passengers': 1.0, 'key': b'2009-07-05 11:04:32.000000-73.985540.759440.7515-73.9916'}\n",
            "{'fare_amount': 19.0, 'dayofweek': b'Fri', 'hourofday': 8, 'pickuplon': -73.975655, 'pickuplat': 40.761734, 'dropofflon': -74.01345, 'dropofflat': 40.71575, 'passengers': 1.0, 'key': b'2013-04-26 08:02:05.000000-73.975740.761740.7158-74.0135'}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "xYZzTbmAVTWn",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def add_engineered(features):\n",
        "    # this is how you can do feature engineering in TensorFlow\n",
        "    distance = tf.sqrt((features['pickuplat'] - features['dropofflat'])**2 +\n",
        "                       (features['pickuplon'] - features['dropofflon'])**2)\n",
        "    \n",
        "    # euclidian distance is hard for a neural network to emulate\n",
        "    features['euclidean'] = distance\n",
        "    return features\n",
        "\n",
        "def features_and_labels(features):\n",
        "  features = add_engineered(features)\n",
        "  features.pop('key') # this column not needed\n",
        "  label = features.pop('fare_amount') # this is what we will train for\n",
        "  return features, label\n",
        "  \n",
        "def prepare_dataset(dataset, batch_size, truncate=None, shuffle=True):\n",
        "  dataset = dataset.map(features_and_labels)\n",
        "  if truncate is not None:\n",
        "    dataset = dataset.take(truncate)\n",
        "  dataset = dataset.cache()\n",
        "  if shuffle:\n",
        "    dataset = dataset.shuffle(10000)\n",
        "  dataset = dataset.repeat()\n",
        "  dataset = dataset.batch(batch_size)\n",
        "  dataset = dataset.prefetch(-1) # prefetch next batch while training (-1: autotune prefetch buffer size)\n",
        "  return dataset\n",
        "\n",
        "one_item = load_dataset(TRAIN_DATA_PATTERN).map(features_and_labels).take(1).batch(1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "Q9Zf5ra8WZk_",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Linear Keras model [WORK REQUIRED]\n",
        "1. What do the columns do ? Familiarize yourself with these column types.\n",
        "\n",
        "`numeric_col = fc.`[`numeric_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/numeric_column)`('name')`\n",
        "\n",
        "`bucketized_numeric_col = fc.`[`bucketized_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/bucketized_column)`(fc.`[`numeric_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/numeric_column)`('name'), [0, 2, 10])`\n",
        "\n",
        "\n",
        "`indic_of_categ_col = fc.`[`indicator_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column)`(fc.`[`categorical_column_with_identity`](https://www.tensorflow.org/api_docs/python/tf/feature_column/categorical_column_with_identity)`('name', num_buckets = 24))`\n",
        "\n",
        "`indic_of_categ_vocab_col = fc.`[`indicator_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column)`(fc.`[`categorical_column_with_identity`](https://www.tensorflow.org/api_docs/python/tf/feature_column/categorical_column_with_vocabulary_list)`('color', vocabulary_list = ['red', 'blue']))` \n",
        "\n",
        "\n",
        "`indic_of_crossed_col = fc.`[`indicator_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column)`(fc.`[`crossed_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/crossed_column)`([categcol1, categcol2], 16*16))`\n",
        "\n",
        "\n",
        "`embedding_of_crossed_col = fc.`[`embedding_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/embedding_column)`(fc.`[`crossed_column`](https://www.tensorflow.org/api_docs/python/tf/feature_column/crossed_column)`([categcol1, categcol2], 16*16), 5)`\n",
        "\n",
        "| column | output vector shape | nb of parameters |\n",
        "|--------------|---------------------------------|------------------------------|\n",
        "| numeric_col | [1] | 0 |\n",
        "| bucketized_numeric_col | [bucket boundaries+1] | 0 |\n",
        "| indic_of_categ_col | [nb categories] | 0 |\n",
        "| indic_of_categ_vocab_col | [nb categories] | 0 |\n",
        "| indic_of_crossed_col | [nb crossed categories] | 0 |\n",
        "| embedding_of_crossed_col | [nb crossed categories] | crossed categories * embedding size |\n",
        "\n",
        "2. Let's start with all the data in as simply as possible: numerical columns for numerical values, categorical (one-hot encoded) columns for categorical data like the day of the week or the hour of the day. Try training...\n",
        " * RSME flat at 8-9 ... not good\n",
        "3. Try to replace the numerical latitude and longitudes by their bucketized versions\n",
        " * RSME trains to 6 ... progress!\n",
        "4. Try to add an engineered feature like 'euclidean' for the distance traveled by the taxi\n",
        " * RMSE trains down to 4-5 ... progress !\n",
        " The euclidian distance is really hard to emulate for a neural network. Look through the code to see how it was \"engineered\".\n",
        "5. Now add embedded crossed columns for:\n",
        "  * hourofday x dayofweek\n",
        "   * pickup neighborhood (bucketized pickup lon x bucketized pickup lat)\n",
        "   * dropoff neighborhood (bucketized dropoff lon x bucketized dropoff lat)\n",
        "   * is this better ?\n",
        "   \n",
        "The big wins were bucketizing the coordinates and adding the euclidian distance. The cross column add only a little, and only if you train for longer. Try training on 10x the training and validation data. With crossed columns you should be able to reach RMSE=3.9"
      ]
    },
    {
      "metadata": {
        "id": "F0qPAxfnWYaj",
        "colab_type": "code",
        "outputId": "3a47be3f-3b9b-4612-aa05-43428cfdbbdb",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 411
        }
      },
      "cell_type": "code",
      "source": [
        "NB_BUCKETS = 16\n",
        "latbuckets = np.linspace(38.0, 42.0, NB_BUCKETS).tolist()\n",
        "lonbuckets = np.linspace(-76.0, -72.0, NB_BUCKETS).tolist()\n",
        "\n",
        "\n",
        "# the columns you can play with\n",
        "\n",
        "# Categorical columns are used as:\n",
        "# fc.indicator_column(dayofweek)\n",
        "dayofweek = fc.categorical_column_with_vocabulary_list('dayofweek', vocabulary_list = ['Sun', 'Mon', 'Tues', 'Wed', 'Thu', 'Fri', 'Sat'])\n",
        "hourofday = fc.categorical_column_with_identity('hourofday', num_buckets = 24)\n",
        "\n",
        "# Bucketized columns can be used as such:\n",
        "bucketized_pick_lat = fc.bucketized_column(fc.numeric_column('pickuplon'), lonbuckets)\n",
        "bucketized_pick_lon = fc.bucketized_column(fc.numeric_column('pickuplat'), latbuckets)\n",
        "bucketized_drop_lat = fc.bucketized_column(fc.numeric_column('dropofflon'), lonbuckets)\n",
        "bucketized_drop_lon = fc.bucketized_column(fc.numeric_column('dropofflat'), latbuckets)\n",
        "\n",
        "# Cross columns are used as\n",
        "# fc.embedding_column(day_hr, 5)\n",
        "day_hr =  fc.crossed_column([dayofweek, hourofday], 24 * 7)\n",
        "pickup_cross  = fc.crossed_column([bucketized_pick_lat, bucketized_pick_lon], NB_BUCKETS * NB_BUCKETS)\n",
        "drofoff_cross = fc.crossed_column([bucketized_drop_lat, bucketized_drop_lon], NB_BUCKETS * NB_BUCKETS)\n",
        "#pickdorp_pair  = fc.crossed_column([pickup_cross, ddropoff_cross], NB_BUCKETS ** 4 )\n",
        "  \n",
        "columns = [\n",
        "    # Categorical columns       \n",
        "    fc.indicator_column(dayofweek),\n",
        "    fc.indicator_column(hourofday),\n",
        "    # Bucketized columns\n",
        "    bucketized_pick_lat,\n",
        "    bucketized_pick_lon,\n",
        "    bucketized_drop_lat,\n",
        "    bucketized_drop_lon,\n",
        "    # Numeric columns\n",
        "    fc.numeric_column('passengers'),\n",
        "    #fc.numeric_column('pickuplon'), # replaced by bucketized\n",
        "    #fc.numeric_column('pickuplat'), # replaced by bucketized\n",
        "    #fc.numeric_column('dropofflon'), # replaced by bucketized\n",
        "    #fc.numeric_column('dropofflat'), # replaced by bucketized\n",
        "    # Engineered features that are created in the input_fn\n",
        "    fc.numeric_column('euclidean'),\n",
        "    # Feature crosses\n",
        "    #fc.embedding_column(pd_pair, 5),\n",
        "    fc.embedding_column(pickup_cross, 5),\n",
        "    fc.embedding_column(drofoff_cross, 5),\n",
        "    fc.embedding_column(day_hr, 5)\n",
        "]\n",
        "\n",
        "l = tf.keras.layers\n",
        "model = tf.keras.Sequential(\n",
        "    [\n",
        "        fc.FeatureLayer(columns),\n",
        "        l.Dense(100, activation='relu'),\n",
        "        l.Dense(64, activation='relu'),\n",
        "        l.Dense(32, activation='relu'),\n",
        "        l.Dense(16, activation='relu'),\n",
        "        l.Dense(1, activation=None), # regression\n",
        "    ])\n",
        "\n",
        "def rmse(y_true, y_pred): # Root Mean Squared Error\n",
        "  return tf.sqrt(tf.reduce_mean(tf.square(y_pred - y_true)))\n",
        "\n",
        "def mae(y_true, y_pred): # Mean Squared Error\n",
        "  return tf.reduce_mean(tf.abs(y_pred - y_true))\n",
        "  \n",
        "model.compile(optimizer=tf.train.AdamOptimizer(), # little bug: in eager mode, 'adam' is not yet accepted, must spell out tf.train.AdamOptimizer()\n",
        "              loss='mean_squared_error',\n",
        "              metrics=[rmse])\n",
        "\n",
        "# print model layers\n",
        "model.predict(one_item, steps=1) # little bug: with FeatureLayer, must call the model once on dummy data before .summary can work\n",
        "model.summary()"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/sparse_ops.py:1165: sparse_to_dense (from tensorflow.python.ops.sparse_ops) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "Create a `tf.sparse.SparseTensor` and use `tf.sparse.to_dense` instead.\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "feature_layer (FeatureLayer) multiple                  3400      \n",
            "_________________________________________________________________\n",
            "dense (Dense)                multiple                  11700     \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              multiple                  6464      \n",
            "_________________________________________________________________\n",
            "dense_2 (Dense)              multiple                  2080      \n",
            "_________________________________________________________________\n",
            "dense_3 (Dense)              multiple                  528       \n",
            "_________________________________________________________________\n",
            "dense_4 (Dense)              multiple                  17        \n",
            "=================================================================\n",
            "Total params: 24,189\n",
            "Trainable params: 24,189\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "qwlP-V2yulrl",
        "colab_type": "code",
        "outputId": "6c768349-9a34-4a64-cc76-f6261beac841",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 289
        }
      },
      "cell_type": "code",
      "source": [
        "EPOCHS = 8\n",
        "BATCH_SIZE = 512\n",
        "TRAIN_SIZE = 640*1024  # max is 2,141,023\n",
        "VALID_SIZE = 64*1024   # max is 2,124,500\n",
        "\n",
        "# Playground settings: TRAIN_SIZE = 64*1024, VALID_SIZE = 4*1024\n",
        "# Solution settings: TRAIN_SIZE = 640*1024, VALID_SIZE = 64*1024\n",
        "\n",
        "# This should reach RMSE = 3.9 (multiple runs may be necessary)\n",
        "\n",
        "train_dataset = prepare_dataset(load_dataset(TRAIN_DATA_PATTERN), batch_size=BATCH_SIZE, truncate=TRAIN_SIZE)\n",
        "valid_dataset = prepare_dataset(load_dataset(VALID_DATA_PATTERN), batch_size=BATCH_SIZE, truncate=VALID_SIZE, shuffle=False)\n",
        "\n",
        "history = model.fit(train_dataset, steps_per_epoch=TRAIN_SIZE//BATCH_SIZE, epochs=EPOCHS, shuffle=True,\n",
        "                    validation_data=valid_dataset, validation_steps=VALID_SIZE//BATCH_SIZE)"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/8\n",
            "1280/1280 [==============================] - 175s 137ms/step - loss: 33.9925 - rmse: 5.1992 - val_loss: 19.2683 - val_rmse: 3.9288\n",
            "Epoch 2/8\n",
            "1280/1280 [==============================] - 119s 93ms/step - loss: 16.6453 - rmse: 3.8540 - val_loss: 18.3980 - val_rmse: 3.9866\n",
            "Epoch 3/8\n",
            "1280/1280 [==============================] - 120s 94ms/step - loss: 15.8578 - rmse: 3.7946 - val_loss: 17.6835 - val_rmse: 3.9520\n",
            "Epoch 4/8\n",
            "1280/1280 [==============================] - 120s 94ms/step - loss: 15.5091 - rmse: 3.7660 - val_loss: 17.1576 - val_rmse: 3.9047\n",
            "Epoch 5/8\n",
            "1280/1280 [==============================] - 120s 93ms/step - loss: 15.2341 - rmse: 3.7393 - val_loss: 15.6450 - val_rmse: 3.6961\n",
            "Epoch 6/8\n",
            "1280/1280 [==============================] - 120s 93ms/step - loss: 15.0684 - rmse: 3.7237 - val_loss: 16.2558 - val_rmse: 3.7953\n",
            "Epoch 7/8\n",
            "1280/1280 [==============================] - 118s 92ms/step - loss: 14.9288 - rmse: 3.7060 - val_loss: 15.8727 - val_rmse: 3.7286\n",
            "Epoch 8/8\n",
            "1280/1280 [==============================] - 117s 91ms/step - loss: 14.7660 - rmse: 3.6874 - val_loss: 15.5079 - val_rmse: 3.6689\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "t5Ty-HFjWbPM",
        "colab_type": "code",
        "outputId": "fee21397-17bd-40c7-f853-da1ab7d05a6e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 767
        }
      },
      "cell_type": "code",
      "source": [
        "print(history.history.keys())\n",
        "display_training_curves(history.history['rmse'], history.history['val_rmse'], 'accuracy', 211)\n",
        "display_training_curves(history.history['loss'], history.history['val_loss'], 'loss', 212)"
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "dict_keys(['val_loss', 'val_rmse', 'loss', 'rmse'])\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nQciyjH379mHHjh0MfhfoL3/5C7xeb85Cl+3bt2Pu3LkWjqr63X777XjyySdx9913IxwO44c//CFE\nkfMSVLnWr1+Pbdu24e2330YsFsOWLVsqMphUo7a2Nnzta1/DXXfdBQDo6uri74My8Xg8OWvRKong\n9UQY0WQAAALySURBVHp1qwdBRERERFRN+GcSEREREVGJGKKJiIiIiErEEE1EREREVCKGaCIiIiKi\nEjFEExERERGViCGaiIgMe/fuxaOPPmr1MIiIKh5DNBERERFRiXixFSKiKvT73/8eb731FuLxODo6\nOnDHHXfggQcewFe/+lUcP34cAPDUU0+hra0N77zzDl566SWoqgpVVfHQQw+hra0NR44cwa5du6Ao\nChobG7F9+3YAwMTEBB599FEMDAxg7ty5eOaZZyAIgoU/LRFR5eFMNBFRlfn444+xf/9+vPDCC+ju\n7kZ9fT3ef/99nD59GrfeeitefPFFXHvttdizZw9CoRCeeuopPP300/jFL36Br3zlK3j++ecBAI89\n9hgefvhh/PKXv8SqVatw4MABAEB/fz+2bt2Knp4e9Pf349ixY1b+uEREFYkz0UREVebQoUP44osv\ncO+99wIANE3D8PAwXC4Xli9fDgC4+uqr8corr+Dzzz9Hc3Mz2tvbAQDXXnstXnvtNXi9XgQCASxa\ntAgAsHHjRgDJnujOzk6oqgoAaG1tRSAQmO0fkYio4jFEExFVGZvNhuuvvx6bN282tp05cwZ33nmn\n8VjX9aItGNnbE4lE0feXJKnMIyYiqj1s5yAiqjIrV67Eu+++i2AwCAB49dVX4fF44Pf78cknnwAA\nPvzwQyxevBgLFizA2NgYzp49CwB4//33sWLFCrjdbrjdbhw9ehQAsGfPHrz66qvW/EBERFWIM9FE\nRFWms7MT3/zmN/Hd734XdrsdLS0tWLVqFdra2rB371787Gc/g67rePLJJ6GqKh555BFs3boVNpsN\nDocDjzzyCADg8ccfx09/+lPIsoyGhgZs374d+/fvt/aHIyKqEoLX69WtHgQREV2YM2fO4J577sHe\nvXutHgoR0UWB7RxERERERCXiTDQRERERUYk4E01EREREVCKGaCIiIiKiEjFEExERERGViCGaiIiI\niKhEDNFERERERCViiCYiIiIiKtH/B77Ajr8WTyhHAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 720x720 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "h94fMRnObLSi",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}